package com.bruce.shop.service.impl;

import com.bruce.shop.dao.BaseDao;
import com.bruce.shop.entity.Page;
import com.bruce.shop.service.BaseService;

import java.util.List;

/**
 * @author BruceXia
 * @version 1.0.0
 * @description:抽取出来的业务层接口抽象类，实现业务层Base接口的所有功能
 * @date 2022/9/1719:15
 */
public abstract class BaseServiceImpl<T> implements BaseService<T>{

    //只是做了声明操作，并没有实例化dao层
    //需要让子类来实现
    protected abstract BaseDao<T> getBaseDao();
    @Override
    public boolean save(T t) {
        return getBaseDao().insert(t)>0;
    }

    @Override
    public boolean updateById(T t) {
        return getBaseDao().update(t)>0;
    }

    @Override
    public T byId(Integer id) {
        return getBaseDao().selectById(id);
    }

    @Override
    public boolean removeById(Integer id) {
        return getBaseDao().deleteById(id) > 0;
    }

    @Override
    public List list() {
        return getBaseDao().list();
    }

    /**
     * 分页的处理，由servlet传入一个page对象，
     * 然后跟据其携带的数据进行分页查询
     * @param page
     */
    @Override
    public void page(Page page) {
        Integer curPage = page.getCurPage();
        Integer size = page.getSize();

        Integer count = getBaseDao().count();
        page.setTotalCount(count);

        if (count % size == 0) {
            page.setTotalPage(count / size);
        } else {
            page.setTotalPage((count / size) + 1);
        }

        List<T> list = getBaseDao().list((curPage - 1) * size, size);

        page.setData(list);
    }
}
